/*
 * HElemento.h - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#ifndef HELEMENTO_H_
#define HELEMENTO_H_

#include <string>
#include "../util/genCollections/ColConcrete.h"
#include "../util/genCollections/ConcreteIterator.h"
#include "../dao/Artista.h"
#include "../dt/ArtistaDT.h"
#include "../dao/Album.h"
#include "../dao/TemaArtista.h"
#include "../dt/AlbumDT.h"
#include "../dt/TemaDT.h"
#include "../dao/Single.h"
#include "../dt/SingleDT.h"
#include "../dao/Pista.h"
#include "../dt/PistaDT.h"
#include "../dao/Solista.h"
#include "../dao/Banda.h"
#include "../dt/SolistaDT.h"
#include "../dt/BandaDT.h"

using namespace std;

class HElemento
{
private:
	HElemento();

	static HElemento *instance;

	int sig_id_tema;

	ColConcrete<Artista*> *colArtista;

	ColConcrete<Album*> *colAlbum;

	ColConcrete<Tema*> *colTema;

	ColConcrete<TemaArtista*> *colTemaArtista;

public:
	static HElemento *getInstance();

	virtual Artista *obtenerArtista(string nombre);

	virtual void crearArtista(ArtistaDT *artistaDT);

	virtual void crearAlbum(AlbumDT *albumDT);

	virtual int crearTema(TemaDT *temaDT);

	virtual void crearTemaArtista(string tituloTema, string nombreArtista);

	virtual ~HElemento();
};

#endif /* HELEMENTO_H_ */
